package com.adds.lvds.security.acegi.utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;

import com.adds.lvds.security.model.SysCurrentUser;



public class CurrentUserUtils {
	/**
	 * 获取当前用户名
	 * @return
	 */
	public static String getUsername(){
		String getUsername = null;
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		if(auth!=null){
			Object principal = auth.getPrincipal();
			if(principal instanceof UserDetails){
				getUsername = ((UserDetails)principal).getUsername();
			}
		}
		return getUsername;
	}
	/**
	 * 获取当前用户信息
	 * @param request
	 * @return
	 */
	public static SysCurrentUser currentUser(HttpServletRequest request) {
		SysCurrentUser sysCurrentUser = 
			(SysCurrentUser)request.getSession()
			.getAttribute(SysCurrentUser.LVDS_CURRENT_USER_OBJECT_KEY);
		return sysCurrentUser;
	}
	
	
	/**
	 * 将字符串以为MD5方式加密
	 * @param str
	 * @return
	 */
	public static String getMD5Str(String str) {      
	      MessageDigest messageDigest = null;      
	      
	        try {      
	            messageDigest = MessageDigest.getInstance("MD5");      
	      
	            messageDigest.reset();      
	      
	            messageDigest.update(str.getBytes("UTF-8"));      
	        } catch (NoSuchAlgorithmException e) {      
	            System.out.println("NoSuchAlgorithmException caught!");      
	            System.exit(-1);      
	        } catch (UnsupportedEncodingException e) {      
	           e.printStackTrace();      
	       }      
	      
	      byte[] byteArray = messageDigest.digest();      
	    
	       StringBuffer md5StrBuff = new StringBuffer();      
	   
	       for (int i = 0; i < byteArray.length; i++) {                  
	          if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)      
	              md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));      
	           else      
	               md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));      
	       }      
	    
	      return md5StrBuff.toString();      
	   }     
}
